fix(og): add per-IP rate limiting to /api/og #5754
Conversation
|
@taniy8 is attempting to deploy a commit to the jhasourav07's projects Team on Vercel. A member of the Team first needs to authorize it. |
📦 Next.js Bundle Size Report (Gzipped Sizes)✨ No significant bundle size changes detected. 📊 Summary of Totals
|
Aamod007
left a comment
There was a problem hiding this comment.
Nice hardening pass. In �pp/api/og/route.tsx, the new getClientIp(req) keying plus RateLimiter guard closes the unthrottled path before it can fan out GitHub API usage, and the new test in �pp/api/og/route.test.ts proves the 429 branch is wired correctly.
|
🎉 Congratulations @taniy8! Your PR has been successfully merged. 🚀 Thank you for contributing to CommitPulse. Your work helps us build a better tool for the community.
Keep building! 💻✨ |
Description
Fixes #5753
Problem
app/api/og/route.tsxhad zero rate limiting, making it the only unprotectedAPI route in the codebase. This endpoint is embedded in every page's
<meta og:image>tag, meaning every social media bot (Twitter, Discord, Slack, LinkedIn) that crawls
a shared CommitPulse link fires a fresh
fetchGitHubContributionscall against theGitHub API with no throttle.
A single viral post or coordinated scrape could exhaust the entire GitHub API quota,
taking down
/api/streakand/api/statsfor all users globally since they sharethe same token pool.
Fix
Added per-IP rate limiting (30 requests/minute) at the top of the
GEThandler,consistent with the pattern used in
/api/notify,/api/reviews,/api/ci-analytics,and
/api/webhook.Added a test verifying 429 is returned when the limit is exceeded.
Pillar
Visual Preview
N/A
Checklist before requesting a review:
CONTRIBUTING.mdfile.localhost:3000/api/streak?user=YOUR_USERNAME).npm run formatandnpm run lintlocally and resolved all errors (CI will fail otherwise).feat(themes): ...,fix(calculate): ...).README.mdif I added a new theme or URL parameter.Suggested labels: level:critical, bug, security